// #include <stdio.h>
// #include <stdbool.h>
// bool findelement(int arr[][5],int rows,int cols,int target)
// {
//     int row=0;
//     int col=cols-1;
//     while(row<rows&&col>=0)
//     {
//         if(arr[row][col]==target)
//         return true;
//         else if(arr[row][col]>target)
//         col--;
//         else if(arr[row][col]<target)
//         row++;
//     }
//     return false;
// }
// int main()
// {
//     int arr[][5]={
//         {1 ,2 ,3 ,4 ,5},
//         {6 ,7 ,8 ,9 ,10},
//         {11,12,13,14,15},
//         {16,17,18,19,20},
//     };
//     int rows=sizeof(arr)/sizeof(arr[0]);
//     int cols=sizeof(arr[0])/sizeof(arr[0][0]);
//     for(int i=0;i<rows;i++)
//     {
//         for(int j=0;j<cols;j++)
//         printf("%d ",arr[i][j]);
//         printf("\n");
//     }
//     int target;
//     scanf("%d",&target);
//     if(findelement(arr,rows,cols,target))
//     printf("find!\n");
//     else
//     printf("not find!\n");
//     return 0;
// }


// #include <stdio.h>//写一个函数，判断一个字符串是否为另外一个字符串旋转之后的字符串。
// //例如：给定s1 =AABCD和s2 = BCDAA，返回1，表示是，给定s1=abcd和s2=ACBD，返回0，表示不是。
// //即判断s2是否为二倍s1  AABCDAABCD的子串,因为不管怎么旋转，旋转后的字符串都包含在二倍s1的字符串中
// #include <string.h>
// int iffind(char s1[],char s2[])
// {
//     char temp[200];
//     strcpy(temp,s1);
//     strcat(temp,s1);
//     if(strstr(temp,s2)!=NULL)//若s2在temp中存在，返回s2在temp中的地址，否则返回NULL
//     printf("yes\n");//1
//     else
//     printf("no\n");//0
// }
// int findRound(const char * src, char * find)//参考答案
// {
// 	char tmp[256] = { 0 }; //用一个辅助空间将原字符串做成两倍原字符串
// 	strcpy(tmp, src); //先拷贝一遍
// 	strcat(tmp, src); //再连接一遍
// 	return strstr(tmp, find) != NULL; //看看找不找得到
// }
// int main()
// {
//     char s1[100];
//     char s2[100];
//     gets(s1);
//     gets(s2);
//     iffind(s1,s2);
//     return 0;
// }


// #include <stdio.h>//打印n行杨辉三角,未整形版
// void yangHuiTriangle(int n)
// {
// 	int data[30] = { 1 };
// 	int i, j;
// 	printf("1\n"); //第一行就直接打印了
// 	for (i = 1; i < n; i++) //从第二行开始
// 	{
// 		for (j = i; j > 0; j--) //从后向前填，避免上一行的数据在使用前就被覆盖
// 		{
// 			data[j] += data[j - 1]; //公式同上，由于变成了一维，公式也变简单了。
// 		}
// 		for (j = 0; j <= i; j++) //这一行填完就直接打印了。
// 		{
// 			printf("%d ", data[j]);
// 		}
// 		putchar('\n');
// 	}
// }
// int main()
// {
//     int n=5;
//     yangHuiTriangle(n);
//     return 0;
// }



// #include <stdio.h>//找出2个单身狗
// void findtwosingle(int arr[],int size,int* num1,int* num2)
// {
//     int ret=0;
//     for(int i=0;i<size;i++)
//     {
//         ret^=arr[i];//异或^,相同为0，不同为1;0与任何数异或为任何数
//     }
//     int pos=0;
//     for(int i=0;i<32;i++)
//     {
//         if(ret&1<<i)//判断ret的第i位是否为1；按位与：都为1才为1，否则为0
//         {
//             pos=i;
//             break;
//         }
//     }
//     *num1=0;
//     *num2=0;
//     for(int i=0;i<size;i++)
//     {
//         if(arr[i]&(1<<pos))
//         {
//             *num1^=arr[i];
//         }
//         else
//         {
//             *num2^=arr[i];
//         }
//     }
// }
// int main()
// {
//     int arr[10]={1,2,3,4,5,1,2,3,4,6};
//     int num1,num2;
//     findtwosingle(arr,10,&num1,&num2);
//     printf("num1=%d num2=%d\n",num1,num2);
//     return 0;
// }



// #include <stdio.h>
// int main()
// {
//     int year,month,day;
//     scanf("%d %d",&year,&month);
//     if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)
//     day=31;
//     else if(month==4||month==7||month==9||month==11)
//     day=30;
//     else if(month==2)
//     {
//         if(year%4==0&&year%100!=0||year%400==0)
//         day=29;
//         else
//         day=28;
//     }
//     printf("%d\n",day);
//     return 0;
// }



#include  <stdio.h>
int main()
{
    int day[12]={31,28,31,30,31,30,31,31,30,31,30,31};
    int year,month;
    while(scanf("%d %d",&year,&month)!=EOF)
    {
        if(year%4==0&&year%100!=0||year%400==0)
        day[1]=29;
        printf("%d\n",day[month-1]);
    }
 return 0;

}



// #include<stdio.h> 
// int main() {

//     int year, month;
//     while (scanf("%d %d", &year, &month) != EOF)
//     {
//         switch (month)
//         {
//         case 2: 
//             if (year % 400 == 0 || year % 4 == 0 && year % 100 != 0)
//                 printf("29\n");
//             else
//                 printf("28\n");
//                 break;
//         case 4:
//         case 6:
//         case 9:
//         case 11: printf("30\n"); break; 
//         default: printf("31\n"); break; 
//         }
//     }
//     return 0; 
// }